package Search;

// >target最小数的索引
public class Upper {

    private Upper(){}

    public static <E extends Comparable<E>> int upper(E[] data,E target){
        int l = 0,r = data.length;
        while (l < r){
            int mid = l + (r - l) / 2;
            //因为等于目标并不是大于，所以等于也要继续
            if (data[mid].compareTo(target) <= 0)
                l = mid + 1;
            //这里的右边界一定要包括中间值，因为可能mid就是任务索引
            else r = mid;
        }
        //最后一定l = r才退出，而那个数一定满足条件。如果整个数组都没有就会返回data.length一个越界的索引
        return l;
    }
}
